package com.xhs.utils;

import cn.hutool.core.util.StrUtil;
import cn.zhxu.okhttps.OkHttps;
import com.alibaba.fastjson2.JSONObject;
import com.xhs.constant.Constants;
import lombok.extern.slf4j.Slf4j;

import java.util.Map;

/**
 * @desc: okhttps发送请求工具类
 * @projectName: spring-boot-demo
 * @author: xhs
 * @date: 2024-06-08 16:43
 * @version: JDK 1.8
 */
@Slf4j
public class SendHttpUtils {

    /**
     * Get请求
     *
     * @param url         请求url
     * @param headers     请求头的数据
     * @param bodyPara    请求体的数据
     * @return JSONObject
     */
    public static JSONObject sendGet(String url, Map<String, String> headers, Map<String, Object> bodyPara) {
        // 打印请求日志
        StringBuilder buffer = new StringBuilder();
        buffer.append(Constants.LINE);
        buffer.append("==============================请求开始==============================").append(Constants.LINE);
        String response = OkHttps.sync(url)
                .addHeader(headers)
                .addUrlPara(bodyPara)
                .get()
                .getBody()
                .toString();
        JSONObject jsonObject = JSONObject.parseObject(response);
        buffer.append(Constants.IN_HEADER).append("GET请求-Url:").append(url).append(Constants.LINE);
        buffer.append(Constants.IN_HEADER).append("GET请求-Header:").append(headers).append(Constants.LINE);
        buffer.append(Constants.IN_HEADER).append("GET请求-Param:").append(bodyPara).append(Constants.LINE);
        buffer.append(Constants.OUT_HEADER).append("GET请求-Response:").append(jsonObject).append(Constants.LINE);
        buffer.append("==============================请求结束==============================").append(Constants.LINE);
        log.info(buffer.toString());
        return jsonObject;
    }

    /**
     * Post请求
     *
     * @param url         请求url
     * @param contentType 类型 默认为 application/json
     * @param headers     请求头的数据
     * @param bodyPara    请求体的数据
     * @return JSONObject
     */
    public static JSONObject sendPost(String url, String contentType, Map<String, String> headers, Map<String, Object> bodyPara) {
        if (StrUtil.isEmpty(contentType)) {
            contentType = Constants.JSON;
        }
        // 打印请求日志
        StringBuilder buffer = new StringBuilder();
        buffer.append(Constants.LINE);
        buffer.append("==============================请求开始==============================").append(Constants.LINE);
        // 发送同步请求
        String response = OkHttps.sync(url)
                .bodyType(contentType)
                .addHeader(headers)
                .addBodyPara(bodyPara)
                .post()
                .getBody()
                .toString();
        JSONObject jsonObject = JSONObject.parseObject(response);
        buffer.append(Constants.IN_HEADER).append("POST请求-Url:").append(url).append(Constants.LINE);
        buffer.append(Constants.IN_HEADER).append("POST请求-Type:").append(contentType).append(Constants.LINE);
        buffer.append(Constants.IN_HEADER).append("POST请求-Header:").append(headers).append(Constants.LINE);
        buffer.append(Constants.IN_HEADER).append("POST请求-Param:").append(bodyPara).append(Constants.LINE);
        buffer.append(Constants.OUT_HEADER).append("POST请求-Response:").append(jsonObject).append(Constants.LINE);
        buffer.append("==============================请求结束==============================").append(Constants.LINE);
        log.info(buffer.toString());
        return jsonObject;
    }
}
